package com.cy.store.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * @Author: jun
 * @Date:2022/11/4 13:45
 * @概述：
 */

/**
 * 定义一个拦截器
 */
public class LoginInterceptor implements HandlerInterceptor {

    /**
     * 检测全局session对象中是否有uid数据，如果有数据则放行，如果没有则重定向到登录页面
     * @param request   请求对象
     * @param response  响应对象
     * @param handler   处理器（把url和controller映射到一块）
     * @return  如果返回值为true表示放行当前的请求，如果返回值为false则表示拦截
     * @throws Exception
     */
    //在DispatcherServlet调用所有的请求方法前被自动调用执行的方法
    //SpringBoot会自动把请求对象给request，响应对象给到response，适配器给到handler
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception{
        Object uid = request.getSession().getAttribute("uid");
        if (uid == null){//为空说明用户没有登录过系统，则重定向到login.html页面
            //不能用相对路径，因为这里是要告诉前端访问的新页面是在哪个目录下的新页面
            //但是前面的localhost：8080可以省略，因为在同一个目录下
            response.sendRedirect("/web/login.html");
            //结束后续的调用
            return false;
        }
        //放行这个请求
        return true;
    }
}
